package juegoPlantaVsZombies;

import java.util.List;

public class Planta {
	// Variables de instancias
	private int capAtaque;
	private int capDefensiva;
	private boolean estadoViva;
	private String nombre;
	private boolean terrestre;// Si el booleano es true significa que es una Planta de Tierra, en el caso contrario, seria de agua.
	private List<Mejora> mejorasCompradas;
	private List<Mejora> mejorasDisponibles;
	
	//Constructor
	public Planta(){}
	public Planta(int Patk, int Pdef, String nombre, boolean terreno){
		this.setCapAtaque(Patk);
		this.setCapDefensiva(Pdef);
		this.setNombre(nombre);
		this.setEstadoViva(false);
		this.setTerreno(terreno);
	}

	// Accesors
	

	public boolean esTerrestre() {
		return terrestre;
	}
	public void setTerreno(boolean terreno) {
		this.terrestre = terreno;
	}
	
	// getter y setter de ataque
	public int getCapAtaque() {
		return capAtaque;
	}

	public void setCapAtaque(int capAtaque) {
		this.capAtaque = capAtaque;
	}

	// getter y setter de defensa
	public int getCapDefensiva() {
		return capDefensiva;
	}

	public void setCapDefensiva(int capDefensiva) {
		this.capDefensiva = capDefensiva;
	}

	// setter y getter del estado de viva
	public void setEstadoViva(boolean estadoViva) {
		this.estadoViva = estadoViva;
	}

	public boolean estoyViva() {
		return this.estadoViva;
	}
	
	// Setter y Getter del nombre de la planta
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	// Setter y Getter del nombre de la planta
	
	public List<Mejora> getMejorasCompradas() {
		return mejorasCompradas;
	}
	public void setMejorasCompradas(List<Mejora> mejorasCompradas) {
		this.mejorasCompradas = mejorasCompradas;
	}
	public List<Mejora> getMejorasDisponibles() {
		return mejorasDisponibles;
	}
	public void setMejorasDisponibles(List<Mejora> mejorasDisponibles) {
		this.mejorasDisponibles = mejorasDisponibles;
	}

	// Comportamiento de una planta
	
	public void sigoViva() {
		if (this.getCapDefensiva() <= 0) {
			this.setEstadoViva(false);
		}
	}

	public void atacarZombie(Zombie unZombie) {
		unZombie.descontarVida(this.getCapAtaque());
		if(! unZombie.sigoCaminando()) {
			System.out.println(this.getNombre()+" "+"ha derrotado a: "+unZombie.getNombre());
			 
		}
	}

	public void descontarCapDef(int danioRecibido) {
		this.capDefensiva = this.getCapDefensiva() - danioRecibido;
		this.sigoViva();
	}
	public void mejorar(Mejora unaMejora) {
		if(unaMejora.isDefensiva()){
			this.setCapDefensiva(this.getCapDefensiva()+ unaMejora.getCantidad());
		}
		else {
			this.setCapAtaque(this.getCapAtaque()+unaMejora.getCantidad());
		}
		this.sacarDisponibilidad(unaMejora);
	}
	private void sacarDisponibilidad(Mejora unaMejora) {
		this.getMejorasDisponibles().remove(unaMejora);
		this.getMejorasCompradas().add(unaMejora);
	}

}
